# 文件读写
# open() 将会返回一个 file 对象，基本语法格式如下:
# open(filename, mode)
# filename：包含了你要访问的文件名称的字符串值。
# mode：决定了打开文件的模式：只读，写入，追加等。所有可取值见如下的完全列表。这个参数是非强制的，默认文件访问模式为只读(r)。
# 模式
# 描述
# r
# 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
# rb
# 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
# r+
# 打开一个文件用于读写。文件指针将会放在文件的开头。
# rb+
# 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
# w
# 打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# wb
# 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# w+
# 打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# wb+
# 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# a
# 打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# ab
# 以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# a+
# 打开一个文件用于读写。如果该文件已存在，文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在，创建新文件用于读写。
# ab+
# 以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。如果该文件不存在，创建新文件用于读写。


# 打开一个文件,并制定格式,然后写入数据
f = open("C:\\test\\test1.txt", "w",encoding="utf-8")
num=f.write( "Python 是一个非常好的语言。\n是的，的确非常好!!\n" )
# 写入的字符数
print(num)
# 关闭打开的文件
f.close()







# 读取文件内容，并进行打印
f2 = open("C:\\test\\test1.txt", "r",encoding="utf-8")
# 读取全部
print(f2.read())
f2.close()

# 输出结果
# Python 是一个非常好的语言。
# 是的，的确非常好!!


# 读取文件内容，并进行打印
f3 = open("C:\\test\\test1.txt", "r",encoding="utf-8")
# 读取一行
print(f3.readline())
f3.close()
# Python 是一个非常好的语言。

# 读取文件内容，并进行打印
f3 = open("C:\\test\\test1.txt", "r",encoding="utf-8")
# 读取所有行
print(f3.readlines())
f3.close()

# ['Python 是一个非常好的语言。\n', '是的，的确非常好!!\n']

#迭代读取文件

# 打开一个文件
f4 = open("C:\\test\\test1.txt", "r",encoding="utf-8")
# 便利读取所有行
for line in f4:
    print(line, end='')
f4.close()

# Python 是一个非常好的语言。
# 是的，的确非常好!!

# 吸入一个非字符串的数据
f5 = open("C:\\test\\test1.txt", "w",encoding="utf-8")
value = ('www.panchengming.com', 18)
s = str(value)
f5.write(s)
# 关闭打开的文件
f5.close()

## f.seek()
# 如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。
# from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾，例如：
# seek(x,0) ： 从起始位置即文件首行首字符开始移动 x 个字符
# seek(x,1) ： 表示从当前位置往后移动x个字符
# seek(-x,2)：表示从文件的结尾往前移动x个字符

f6 = open("C:\\test\\test1.txt", "rb+")
f6 .write(b'0123456789abcdef')
# 移动到文件的第六个字节
print(f6 .seek(5))
print(f6 .read(1))
# 移动到文件的倒数第三字节
print(f6 .seek(-3, 2))
print(f6 .read(1))

# 5
# b'5'
# 25
# b'1'
